package com.yuelao.yuelao_backend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuelao.yuelao_backend.dto.CommentDTO;
import com.yuelao.yuelao_backend.dto.PostDTO;
import com.yuelao.yuelao_backend.dto.request.AddCommentRequest;
import com.yuelao.yuelao_backend.dto.request.AddPostRequest;
import com.yuelao.yuelao_backend.entity.Post;

import java.math.BigDecimal;
import java.util.List;

public interface PostService extends IService<Post> {

    /**
     * 获取动态列表
     * @param type 动态类型 (recommend, follow, nearby)
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param latitude 纬度 (仅当type为nearby时需要)
     * @param longitude 经度 (仅当type为nearby时需要)
     * @return 动态DTO列表
     */
    List<PostDTO> getPosts(String type, int pageNum, int pageSize, BigDecimal latitude, BigDecimal longitude);

    /**
     * 获取附近动态
     * @param latitude 纬度
     * @param longitude 经度
     * @return 附近动态DTO列表
     */
    List<PostDTO> getNearbyPosts(BigDecimal latitude, BigDecimal longitude);

    /**
     * 获取动态评论
     * @param postId 动态ID
     * @return 评论DTO列表
     */
    List<CommentDTO> getComments(Long postId);

    /**
     * 点赞动态
     * @param postId 动态ID
     * @param userId 点赞用户ID
     * @return 是否成功
     */
    boolean likePost(Long postId, Long userId);

    /**
     * 评论动态
     * @param postId 动态ID
     * @param userId 评论用户ID
     * @param request 评论请求 (包含 content, parentCommentId, targetUserId)
     * @return 是否成功
     */
    boolean commentPost(Long postId, Long userId, AddCommentRequest request);

    /**
     * 发布动态
     * @param userId 发布用户ID
     * @param request 动态请求
     * @return 是否成功
     */
    boolean addPost(Long userId, AddPostRequest request);

    /**
     * 将Post实体转换为PostDTO
     * @param post Post实体
     * @return PostDTO
     */
    PostDTO convertToPostDTO(Post post);

    /**
     * 批量将Post实体转换为PostDTO（优化查询性能）
     * @param posts Post实体列表
     * @return PostDTO列表
     */
    List<PostDTO> convertToPostDTOList(List<Post> posts);
}